package com.sg.dto.biz.app.req;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * @desc CalculateFinalObjectiveScoreComReqDto
 * @使用场景
 */
@Data
public class CalculateFinalObjectiveScoreComReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 目标归属周期ID
     */
    @NotNull(message = "目标归属周期ID不能为空")
    @ApiModelProperty("目标归属周期ID")
    private String targetAttributionCycleId;

    /**
     * 实际值计算公式 SYSTEM_DOCKING:系统对接实际值 MANUAL_REPORT:人工填报实际值 CLONE_EVA_OBJECT:当前树实际值克隆主树 PERSONAL_KR_ACTUAL_CLONE_EVA_KR:11111个人树KR实际值克隆主树KR STANDARD_OBJECT_CLONE_EVA_OBJECT_ACTUAL:11111OKR部门树标准O实际值克隆主树（+KR） CUSTOM_OBJECT_CLONE_PERSONAL_ACTUAL:11111OKR部门树自定义O实际值克隆个人树（+KR） RIGHTWARD_CALCULATION:向左取最近可循环周期最新 RIGHTWARD_CALCULATION_SUM:向左取最近可循环周期求和 DOWNWARD_CALCULATION_SUM:向下计算参照值不赋值（求和） DOWNWARD_CALCULATION_SUM_COPY:向下计算参照值并赋值（求和） DOWNWARD_CALCULATION_WEIGHT:向下计算参照值不赋值（权重求和） DOWNWARD_CALCULATION_WEIGHT_COPY:向下计算参照值并赋值（权重求和）
     */
    @ApiModelProperty("实际值计算公式")
    private String actualValueCalcFormula;

    /**
     * 目标得分计算公式 CALC:自己计算得分 CLONE_FROM_EVA_SUBJECT:当前树克隆主树得分
     */
    @ApiModelProperty("目标得分计算公式")
    private String calcOrClone;

    /**
     * 目标得分本级与下级组合变量 RANK_CALC:计算本级得分 DOWN_CALC:计算下级得分 RANK_AND_DOWN_CALC:计算本级+下级得分
     */
    @ApiModelProperty("目标得分本级与下级组合变量")
    private String reportScoreCountFormula;

    /**
     * 主树目标得分主客观变量 SUBJECTIVE:主观得分 OBJECTIVE:客观得分 SUBJECTIVE_AND_OBJECTIVE:主观得分+客观得分
     */
    @ApiModelProperty("主树目标得分主客观变量")
    private String subAndObjModel;

    /**
     * 更新周期ID
     */
    @NotNull(message = "更新周期ID不能为空")
    @ApiModelProperty("更新周期ID")
    private String updateCycleId;

    /**
     * 被评对象目标周期ID
     */
    @NotNull(message = "被评对象目标周期ID不能为空")
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
     */
    @NotNull(message = "关联目标内容类型编码不能为空")
    @ApiModelProperty("关联目标内容类型编码")
    private String targetCycleContentTypeCode;

    /**
     * 关联目标内容ID
     */
    @NotNull(message = "关联目标内容ID不能为空")
    @ApiModelProperty("关联目标内容ID")
    private String targetCycleContentId;

    /**
     * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
     */
    @ApiModelProperty("冗余指标业务类型")
    private String targetValueType;

    /**
     * 实际值（数值）
     */
    @ApiModelProperty("实际值（数值）")
    private Double actualValue;

    /**
     * 目标起始值
     */
    @ApiModelProperty("目标起始值")
    private Double evaTargetStartValue;

    /**
     * 目标目标值
     */
    @ApiModelProperty("目标目标值")
    private Double evaTargetValue;

    /**
     * 目标诊断值
     */
    @ApiModelProperty("目标诊断值")
    private Double evaTargetDiagnosticValue;

    /**
     * 权重分值
     */
    @NotNull(message = "权重分值不能为空")
    @ApiModelProperty("权重分值")
    private Double weightScore;

    /**
     * 冗余评价模板ID
     */
    @NotNull(message = "冗余评价模板ID不能为空")
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;

    /**
     * 创建于空间ID
     */
    @NotNull(message = "创建于空间ID不能为空")
    @ApiModelProperty("创建于空间ID")
    private String spaceId;

}
